package fr.iut2.tc1.projet.server;

import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;

import fr.iut2.tc1.projet.client.Services;
import fr.iut2.tc1.projet.client.SponsorArgent;
import fr.iut2.tc1.projet.client.SponsorLot;
/**
 * ServicesImpl est la classe qui implémente les services proposés par le serveur.*/
@SuppressWarnings("serial")
public class ServicesImpl extends RemoteServiceServlet implements Services {
	
	public ArrayList<String> getListImages() {
		return FileFactory.getFilesNames("logos");
	}
	
	public void addSponsorArgent(SponsorArgent sponsor) {
		ArrayList<SponsorArgent> liste = null;
		File test = new File ("nosSponsor/sponsorsArgent.xml");
		XMLEncoder encoder = null;
        try {
			if (!test.exists()) {
				liste = new ArrayList<SponsorArgent>();
			} else {
				liste = this.getListSponsorsArgent();
			}
			liste.add(sponsor);
        	// ouverture de l'encodeur vers le fichier :
    		encoder = new XMLEncoder(new FileOutputStream(test));
            // serialisation de l'objet :
            encoder.writeObject(liste);
            encoder.flush();
            // fermeture de l'encodeur :
            encoder.close();
        } catch (Exception e) {
			e.printStackTrace();
        }
	}
	
	public void delSponsorArgent(String nom){
		ArrayList<SponsorArgent> liste = this.getListSponsorsArgent();
		File test = new File ("nosSponsor/sponsorsArgent.xml");
		XMLEncoder encoder = null;
		try{
			ArrayList<SponsorArgent> newliste = new ArrayList<SponsorArgent>();
			for (SponsorArgent temp : liste) {
				if (!temp.getNom().equalsIgnoreCase(nom)) {
					newliste.add(temp);
				} else {
					File supp = new File(temp.getUrlLogo());
					supp.delete();
				}
			}
	        // ouverture de l'encodeur vers le fichier :
	    	encoder = new XMLEncoder(new FileOutputStream(test));
	        // serialisation de l'objet :
	        encoder.writeObject(newliste);
	        encoder.flush();
	        // fermeture de l'encodeur :
	        encoder.close();
        } catch (Exception e) {
			e.printStackTrace();
        }
	}
	
	public ArrayList<SponsorArgent> getListSponsorsArgent() {
		ArrayList<SponsorArgent> liste = new ArrayList<SponsorArgent>();
		XMLDecoder decoder = null;
		try {
			File f = new File("nosSponsor/sponsorsArgent.xml");
			if (!f.exists()) {
				System.out.println("le fichier sponsorsArgent.xml est inexistant !");
				return liste;
			} else {
				decoder = new XMLDecoder(new FileInputStream(f));
				// deserialisation de l'objet :
				liste = ((ArrayList<SponsorArgent>) decoder.readObject());
				// fermeture du decodeur :
				decoder.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return liste;
	}
	
	public void addSponsorLot(SponsorLot sponsor) {
		ArrayList<SponsorLot> liste = null;
		File test = new File ("nosSponsor/sponsorsLot.xml");
		XMLEncoder encoder = null;
        try {
			if (!test.exists()) {
				liste = new ArrayList<SponsorLot>();
			} else {
				liste = this.getListSponsorsLot();
			}
			liste.add(sponsor);
        	// ouverture de l'encodeur vers le fichier :
    		encoder = new XMLEncoder(new FileOutputStream(test));
            // serialisation de l'objet :
            encoder.writeObject(liste);
            encoder.flush();
            // fermeture de l'encodeur :
            encoder.close();
        } catch (Exception e) {
			e.printStackTrace();
        }
	}
	
	public void delSponsorLot(String nom){
		ArrayList<SponsorLot> liste = this.getListSponsorsLot();
		File test = new File ("nosSponsor/sponsorsArgent.xml");
		XMLEncoder encoder = null;
		try{
			ArrayList<SponsorLot> newliste = new ArrayList<SponsorLot>();
			for (SponsorLot temp : liste) {
				if (!temp.getNom().equalsIgnoreCase(nom)) {
					newliste.add(temp);
				}
			}
	        // ouverture de l'encodeur vers le fichier :
	    	encoder = new XMLEncoder(new FileOutputStream(test));
	        // serialisation de l'objet :
	        encoder.writeObject(newliste);
	        encoder.flush();
	        // fermeture de l'encodeur :
	        encoder.close();
        } catch (Exception e) {
			e.printStackTrace();
        }
	}
	
	public ArrayList<SponsorLot> getListSponsorsLot() {
		ArrayList<SponsorLot> liste = null;
		XMLDecoder decoder = null;
		try {
			File f = new File("nosSponsor/sponsorsLot.xml");
			if (!f.exists()) {
				System.out.println("le fichier sponsorsLot.xml est inexistant !");
				return liste;
			} else {
				decoder = new XMLDecoder(new FileInputStream(f));
				// deserialisation de l'objet :
				liste = ((ArrayList<SponsorLot>)decoder.readObject());
				// fermeture du decodeur :
				decoder.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return liste;
	}
}